package org.theqcp.wow.sim.engine.old.core;

public abstract class Effect {

    public static class Flametongue extends Effect {

	public static final double FLAMETONGUE_ELEMENTAL_WEAPONS = 0.1;
	public static final int FLAMETONGUE_BONUS_SPELLPOWER = 211;

	public static class MH extends Flametongue {

	}

	public static class OH extends Flametongue {

	}

	protected boolean dualImbue;

	public void setDualImbue( boolean dualImbue ) {
	    this.dualImbue = dualImbue;
	}

    }

    public static class Flurry extends Effect {

	protected final double FLURRY_HASTE = 0.05;
	protected final double finalHaste;
	protected final int rank;

	public Flurry(int rank) {
	    this.rank = rank;
	    this.finalHaste = 1.05 + (rank * FLURRY_HASTE);
	}

    }

    public static class JudgementOfWisdom extends Effect {

    }

    public static class MaelstromWeapon extends Effect {

    }

    public static class ManaRegen extends Effect {

	protected boolean hasReplenishment = false;

	public boolean hasReplenishment() {
	    return hasReplenishment;
	}

	public void setHasReplenishment( boolean hasReplenishment ) {
	    this.hasReplenishment = hasReplenishment;
	}

    }

    public static class Windfury extends Effect {

	public static final double WINDFURY_ELEMENTAL_WEAPONS = 0.133333f;
	public static final int WINDFURY_DUALWIELD_PROC_CHANCE = 3600;

	public static class MH extends Windfury {

	}

	public static class OH extends Windfury {

	}

	protected boolean dualImbue;

	public void setDualImbue( boolean dualImbue ) {
	    this.dualImbue = dualImbue;
	}

    }

    protected int attackPowerBonus = 0;
    protected int spellPowerBonus = 0;
    protected double damageMultiplier = 1.0;
    protected double spellCostMultiplier = 1.0;
    protected double spellCritRateMultiplier = 0.0;
    protected double spellDamageMultiplier = 1.0;

    public int getAttackPowerBonus() {
	return attackPowerBonus;
    }

    public void setAttackPowerBonus( int attackPowerBonus ) {
	this.attackPowerBonus = attackPowerBonus;
    }

    public int getSpellPowerBonus() {
	return spellPowerBonus;
    }

    public void setSpellPowerBonus( int spellPowerBonus ) {
	this.spellPowerBonus = spellPowerBonus;
    }

    public double getSpellDamageMultiplier() {
	return spellDamageMultiplier;
    }

    public void setSpellDamageMultiplier( double spellDamageMultiplier ) {
	this.spellDamageMultiplier = spellDamageMultiplier;
    }

    public double getSpellCritRateMultiplier() {
	return spellCritRateMultiplier;
    }

    public void setSpellCritRateMultiplier( double spellCritRateMultiplier ) {
	this.spellCritRateMultiplier = spellCritRateMultiplier;
    }

    public double getSpellCostMultiplier() {
	return spellCostMultiplier;
    }

    public void setSpellCostMultiplier( double spellCostMultiplier ) {
	this.spellCostMultiplier = spellCostMultiplier;
    }

    public void addDamageMultiplier( double d ) {
	this.damageMultiplier += d;
    }

}
